package per.xzer.subject;

/*
【程序1】
有一对兔子，从出生后第3个月起每个月都生一对兔子，
小兔子长到第三个月后每个月又生一对兔子，假如兔子都不死，
问每个月的兔子对数为多少？
 */

import java.util.ArrayList;

public class One {

    //大兔子（能生崽）个数
    private Integer bigRabNum = 0;
    //刚出生的小兔子，由题目可初始设为2
    private Integer bornRabTemp = 2;
    //处于第一个月缓冲期的小兔子数
    private Integer firstRabTemp = 0;

    //中间值
    private Integer temp1 = 0;
    private Integer temp2 = 0;
    public ArrayList rabTotal = new ArrayList();

    /*
     * 算法主C
     */
    private void Time(){
        rabTotal.add(bigRabNum + bornRabTemp + firstRabTemp );

        //大兔子生崽
        //将上个月出生的小兔子数放入temp1
        temp1 = bornRabTemp;
        //上个月处于第一个月缓冲期的小兔子在这个月长大为大兔子
        bigRabNum += firstRabTemp;
        //上个月处于第一个月缓冲期的小兔子数清零
        //secrabtemp = 0;
        firstRabTemp = 0;
        //根据大兔子数计算出这个月出生的小兔子
        bornRabTemp = (bigRabNum/2)*2;

        //上个月的小兔子长大
        //将处于第一个月缓冲期的小兔子数放入temp2
        temp2 = firstRabTemp;
        //上个月出生的小兔子数在这个月处以第一个月缓冲期
        firstRabTemp = temp1;





    }
    /*
     * 时间流逝
     * 输入:Integer 月份
     */
    public void Run(Integer mouthnum){
        for (int i = 0; i < mouthnum; i++) {
            Time();
        }
    }
    /*
     * 计算某月份兔子数
     * return Integer
     */
    private Integer getRabNumInMouth(Integer mouthNum){
        //str = "第" + mouthNum + "个月的兔子数为：" + rabTotal.get(mouthNum-1);
        return (Integer) rabTotal.get(mouthNum - 1);
    }
    /*
     * 遍历某月份之前每个月的兔子数
     * return String
     */
    public String TraRabNumInMouth(Integer mouthNum){
        String str = "";
        Run(mouthNum);
        for (int i = 1; i <= mouthNum; i++) {
            str = str + "第" + i + "个月的兔子数为：" + getRabNumInMouth(i) + "\n";
        }
        return str;
    }
}
